#ifndef __SQUAREMATRIX_H__
#define __SQUAREMATRIX_H__

#include<cmath>

#include "Matrix.hpp"
#include "Vector.hpp"

class SquareMatrix : public Matrix
{

public:
	SquareMatrix( unsigned int n );
	SquareMatrix( const Matrix& m );
	~SquareMatrix();

	// devuelve el determinante de la matriz
	double det() const;

	// triangula la matriz por método de eliminación de Gauss (devuelve L)
	SquareMatrix LUfactorization();
	SquareMatrix QRfactorization();
	void triangulate();

	// traspone la matriz
	void transpose();

	// devuelve la traspuesta
	SquareMatrix transposed() const;

	// devuelve el menor i0 j0
	SquareMatrix minor(unsigned int i0, unsigned int j0) const;

	static SquareMatrix identity( unsigned int n );
	static SquareMatrix Hilbert( unsigned int n, unsigned int cte );
	static SquareMatrix ShootMatrix( unsigned int n, const Vector& y,const Vector& x,unsigned int k);	
	//static SquareMatrix Householder( const Vector& v );	

protected:

};

#endif

